﻿using System;
using Core.AdminGroupMenuPermission;
using Core.Authenticated;
using Core.Library;
using DataObject.Tag;

namespace CMS.Controls.Tag
{
    public partial class CreateOrEditTag : AuthenticatedControl
    {
        protected string ReturnUrl;
        protected string CurrentTab;
        protected string Action;
        protected string Body;

        protected string Content;

        protected void Page_Load(object sender, EventArgs e)
        {
            ReturnUrl = Utils.GetIdFromRequestString(Utils.ReturnUrl, string.Empty);
            Action = Utils.GetIdFromRequestString(Utils.Action, string.Empty);

            if (!IsPostBack)
            {
                var id = Utils.GetIdFromRequestString(Utils.Id, 0);
                ltTitle.Text = id > 0 ? "Sửa tag" : "Tạo mới tag";

                ActionPermission();

                if (id > 0)
                    BindObject(id);
            }
        }

        private void BindObject(int id)
        {
            var o = TagController.Tag_GetById(id);
            if (o == null) return;

            txtName.Text = o.Name;
        }

        public void ActionPermission()
        {

            var isShowPublished = false;

            var adminGroupMenuPermission =
                    AdminGroupMenuPermissionController.AdminGroupMenuPermission_GetBy_AdminUserId_AdminMenuId(CurrentUser.AdminUserId, cControl.AdminMenuId);
            if (adminGroupMenuPermission.Count > 0)
            {
                foreach (var agmp in adminGroupMenuPermission)
                {
                    isShowPublished = StatusHelper.IsChecked(agmp.Status, (int)PermissionObject.CanPublish);
                }
            }

            foreach (var t in Utils.Tabs)
                if (ReturnUrl.IndexOf(t) != -1)
                    CurrentTab = t;

            if (!string.IsNullOrEmpty(CurrentTab))
            {
                // Nếu action là Tạo mới thì nút Save mới được hiển thị
                if (Action.ToLower().Equals("create"))
                    CurrentTab = Utils.IsDraft;

                switch (CurrentTab)
                {
                    // Xuất bản                        
                    case "IsPublished":
                        btnDelete.Visible = isShowPublished;
                        btnSave.Visible = true;
                        break;
                    // Lưu tạm                        
                    case "IsDraft":
                        btnSave.Visible = true;
                        btnDelete.Visible = !Action.ToLower().Equals("create");
                        break;
                }
            }
            else
            {
                btnDelete.Enabled = false;
            }
        }

        public void ManagerAction(string action)
        {
            TagObject o;
            var id = Utils.GetIdFromRequestString(Utils.Id, 0);

            if (action == "Save")
            {
                if (id > 0)
                {
                    if (TagController.Tag_CheckNameExist(id, txtName.Text) > 0)
                    {
                        ltMessage.Text = MessageUtility.ShowMessage(string.Empty,
                                                                    "Tag này đã tồn tại trong hệ thống.",
                                                                    MessageType.Warning);
                        return;
                    }

                    o = TagController.Tag_GetById(id);
                    o.TagId = id;
                    o.Name = txtName.Text;
                    o.EditedBy = CurrentUser.Username;

                    TagController.Tag_Update(o);
                }
                else
                {
                    if (TagController.Tag_CheckNameExist(id, txtName.Text) > 0)
                    {
                        ltMessage.Text = MessageUtility.ShowMessage(string.Empty,
                                                                    "Tag này đã tồn tại trong hệ thống.",
                                                                    MessageType.Warning);
                        return;
                    }

                    o = new TagObject();
                    o.Name = txtName.Text;
                    o.CreatedBy = CurrentUser.Username;

                    TagController.Tag_Create(o);
                }
            }
            if (action == "Delete" && id > 0)
            {
                o = TagController.Tag_GetById(id);
                if (o != null)
                    TagController.Tag_Delete(id);
            }

            Response.Redirect(ReturnUrl);
        }

        #region Buttons

        protected void BtnSave(object sender, EventArgs e)
        {
            ManagerAction("Save");
        }

        protected void BtnDelete(object sender, EventArgs e)
        {
            ManagerAction("Delete");
        }

        #endregion
    }
}